#include "bsp_key.h"
#include "esp_log.h"
//配置引脚寄存器
#define GPIO_INPUT_PIN_SEL0  (1ULL<<GPIO_NUM_0)
#define GPIO_INPUT_PIN_SEL1  (1ULL<<GPIO_NUM_1)
#define GPIO_INPUT_PIN_SEL2  (1ULL<<GPIO_NUM_2)
#define GPIO_INPUT_PIN_SEL3  (1ULL<<GPIO_NUM_3)
#define GPIO_INPUT_PIN_SEL4  (1ULL<<GPIO_NUM_4)
#define GPIO_INPUT_PIN_SEL5  (1ULL<<GPIO_NUM_5)
#define GPIO_INPUT_PIN_SEL6  (1ULL<<GPIO_NUM_6)

/**
 * @函数说明        按键引脚初始化
 * @传入参数        无
 * @函数返回        无
 */
void KeyGpioConfig(void)
{
    gpio_config_t io_conf = {};

    //下降沿中断
    io_conf.intr_type = GPIO_INTR_ANYEDGE;
    //设置GPIO0的输入寄存器
    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL0;
    //输入模式
    io_conf.mode = GPIO_MODE_INPUT;
    //使能上拉模式
    io_conf.pull_up_en = 1;
    io_conf.pull_down_en = 0;
    gpio_config(&io_conf);

    //下降沿中断
    io_conf.intr_type = GPIO_INTR_ANYEDGE;
    //设置GPIO0的输入寄存器
    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL1;
    //输入模式
    io_conf.mode = GPIO_MODE_INPUT;
    //使能上拉模式
    io_conf.pull_up_en = 1;
    io_conf.pull_down_en = 0;
    gpio_config(&io_conf);

    //下降沿中断
    io_conf.intr_type = GPIO_INTR_ANYEDGE;
    //设置GPIO0的输入寄存器
    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL2;
    //输入模式
    io_conf.mode = GPIO_MODE_INPUT;
    //使能上拉模式
    io_conf.pull_up_en = 1;
    io_conf.pull_down_en = 0;
    gpio_config(&io_conf);
    
    //下降沿中断
    io_conf.intr_type = GPIO_INTR_ANYEDGE;
    //设置GPIO0的输入寄存器
    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL3;
    //输入模式
    io_conf.mode = GPIO_MODE_INPUT;
    //使能上拉模式
    io_conf.pull_up_en = 1;
    io_conf.pull_down_en = 0;
    gpio_config(&io_conf);

    //下降沿中断
    io_conf.intr_type = GPIO_INTR_ANYEDGE;
    //设置GPIO0的输入寄存器
    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL4;
    //输入模式
    io_conf.mode = GPIO_MODE_INPUT;
    //使能上拉模式
    io_conf.pull_up_en = 1;
    io_conf.pull_down_en = 0;
    gpio_config(&io_conf);

    //下降沿中断
    io_conf.intr_type = GPIO_INTR_ANYEDGE;
    //设置GPIO0的输入寄存器
    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL5;
    //输入模式
    io_conf.mode = GPIO_MODE_INPUT;
    //使能上拉模式
    io_conf.pull_up_en = 1;
    io_conf.pull_down_en = 0;
    gpio_config(&io_conf);

    //下降沿中断
    io_conf.intr_type = GPIO_INTR_ANYEDGE;
    //设置GPIO0的输入寄存器
    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL6;
    //输入模式
    io_conf.mode = GPIO_MODE_INPUT;
    //使能上拉模式
    io_conf.pull_up_en = 1;
    io_conf.pull_down_en = 0;
    gpio_config(&io_conf);
    ESP_LOGE("bsp_key.c", "key init ed");
}

/**
 * @函数说明        获取按键引脚上的电平状态
 * @传入参数        无
 * @函数返回        0=按键被按下    1=按键没有被按下
 */
bool GetKeyValue(void)
{
    //如果按键状态为0
    if( gpio_get_level(KEY_PIN) == 0 )
    {
        //延时消抖，使用该延时需要加入对应头文件
        vTaskDelay(100);   
        // 如果按键状态还是0，说明按键真的按下
        if( gpio_get_level(KEY_PIN) == 0 )
        {
            return 0;
        }
    }
    return 1;
}